Early computer systems were monolithic, single-processor systems that executed only a single task at each point in time. The early computer systems lacked operating systems and basic programming facilities such as assemblers and compilers. During the first several decades of the computer revolution, many of the basic single-system components of computer systems were developed and evolved to produce capable, operating-system-controlled, multi-tasking computer systems. For another decade, rapid evolution of processor technology, data-storage technologies, memory, and communications technologies led to dramatic increases in the capabilities and capacities of single-processor computer systems. Ultimately, however, in order to achieve even greater capabilities and capacities, computer-system designers turned to multi-processor systems and then to more complex, distributed computing systems comprising aggregations of many intercommunicating computer systems. This turn towards distributed computing was facilitated by the development of distributed locking methods for controlling access to distributed computing resources, distributed operating systems, and high-bandwidth electronic communications. During the past few decades, extremely large cloud-computing facilities have been developed and commercialized to the point that computational bandwidth and data-storage capacity are provided to customers of large cloud-computing providers much as electrical power and water are provided to customers of utility companies. Cloud-computing facilities often employ hundreds, thousands, or more networked and often geographically distributed multi-processor servers that are controlled, by virtualization technology, to produce hierarchical layers of virtualized computing facilities.
Virtual data centers and other virtual data structures are generally implemented on large physical distributed computing systems, including computing systems that employ a management sever to manage a large number of remote host systems. Management servers, in cooperation with host systems, have been designed to move executing virtual machines between host systems, with minimal interruption in virtual-machine execution, on the order of less than one second to a few seconds, in order to facilitate high availability, fault tolerance, load balancing, and other features of robust and efficient virtual data centers. However, copying memory and swap files between host systems during virtual machine migration may be an expensive, temporary overhead, consuming significant processor bandwidth. Designers and developers of distributed computer systems continue to seek methods and systems to more efficiently implement live migration of virtual machines.